package com.geodroid.common.kernel;

import com.geodroid.common.kernel.geos.GeoPoint2;



public interface Path {

/**
 * Sets coords of P and its path parameter when
 * the coords of P have changed.
 * Afterwards P lies on this path.
 * 
 * Note: P.setCoords() is not called!
 * @param PI point P
 */
public void pointChanged(GeoPoint2 PI);

/**
 * Sets coords of P and its path parameter
 * when this path has changed.
 * Afterwards P lies on this path.
 * 
 * Note: P.setCoords() is not called!
 * @param PI point P
 */
public void pathChanged(GeoPoint2 PI);

/**
 * Returns true iff the given point lies on this path.
 * @param PI point
 * @param eps precision
 * @return true iff the given point lies on this path.
 */	
public boolean isOnPath(GeoPoint2 PI, double eps);

/**
 * Returns the smallest possible parameter value for this
 * path (may be Double.NEGATIVE_INFINITY)
 * @return minimum parameter value for this path
 */
public double getMinParameter();

/**
 * Returns the largest possible parameter value for this
 * path (may be Double.POSITIVE_INFINITY)
 * @return maximum parameter value for this path
 */
public double getMaxParameter();

/**
 * Returns whether this path is closed (i.e. its
 * first and last point are equal).	
 * @return true iff closed
 */
public boolean isClosedPath();

/**
 * Returns a PathMover object for this path.
 * @return a PathMover object for this path.
 */
//public PathMover createPathMover();

}
